Micron Document
`:top
En `F33f`_`[informatique`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Informatique]`_`f, `!Spring`! est un `F33f`_`[framework`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Framework]`_`f `F33f`_`[open source`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Open_source]`_`f pour construire et définir l'infrastructure d'une application `F33f`_`[Java`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Java_(technique)]`_`f`:cite-ref-3[`F5bf`_`[3`#cite-note-3]`_`f], dont il facilite le `F33f`_`[développement`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Développement_de_logiciel]`_`f et les tests.

En 2004, Rod Johnson (en) a écrit le livre `*Expert One-on-One J2EE Design and Development`*`:cite-ref-4[`F5bf`_`[4`#cite-note-4]`_`f] qui explique les raisons de la création de Spring.

>>Contents

• `F0af`_`[Conteneur léger`#conteneur-l-ger]`_`f
• `F0af`_`[Composition de Spring`#composition-de-spring]`_`f
• `F0af`_`[Noyau de base`#noyau-de-base]`_`f
• `F0af`_`[Compléments`#compl-ments]`_`f
• `F0af`_`[Notes et références`#notes-et-r-f-rences]`_`f
• `F0af`_`[Voir aussi`#voir-aussi]`_`f
• `F0af`_`[Articles connexes`#articles-connexes]`_`f
• `F0af`_`[Bibliographie`#bibliographie]`_`f
• `F0af`_`[Liens externes`#liens-externes]`_`f

-─

>>Conteneur léger

Spring est considéré comme un conteneur dit « léger ». La raison de ce nommage est expliquée par Erik Gollot dans l’introduction du document `*Introduction au framework Spring`*`:cite-ref-5[`F5bf`_`[5`#cite-note-5]`_`f].

`*« Spring est effectivement un conteneur dit « léger », c’est-à-dire une infrastructure similaire à un `F33f`_`[serveur d'applications`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Serveur_d'applications]`_`f `F33f`_`[J2EE`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Java_EE]`_`f. Il prend donc en charge la création d’objets et la mise en relation d’objets par l’intermédiaire d’un fichier de configuration qui décrit les objets à fabriquer et les relations de dépendances entre ces objets. Le gros avantage par rapport aux serveurs d’application est qu’avec Spring, les classes n’ont pas besoin d’implémenter une quelconque interface pour être prises en charge par le framework (au contraire des `F33f`_`[serveurs d'applications`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Serveur_d'applications]`_`f `F33f`_`[J2EE`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Java_EE]`_`f et des `F33f`_`[EJBs`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Enterprise_JavaBeans]`_`f). C’est en ce sens que Spring est qualifié de conteneur « léger ». »`*

Spring s’appuie principalement sur l’intégration de trois concepts clés :

1. L’`F33f`_`[inversion de contrôle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Inversion_de_contrôle]`_`f est assurée de deux façons différentes : la recherche de dépendances et l'`F33f`_`[injection de dépendances`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Injection_de_dépendances]`_`f ;
2. La `F33f`_`[programmation orientée aspect`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmation_orientée_aspect]`_`f ;
3. Une couche d’abstraction.

La couche d’abstraction permet d’intégrer d’autres `F33f`_`[frameworks`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Framework]`_`f et `F33f`_`[bibliothèques`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Bibliothèque_logicielle]`_`f avec une plus grande facilité. Cela se fait par l’apport ou non de couches d’abstraction spécifiques à des frameworks particuliers. Il est ainsi possible d’intégrer un module d’envoi de mails plus facilement.

L’`F33f`_`[inversion de contrôle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Inversion_de_contrôle]`_`f :

1. La recherche de dépendance : consiste pour un objet à interroger le conteneur, afin de trouver ses dépendances avec les autres objets. C’est un cas de fonctionnement similaire aux EJBs ;
2. L’`F33f`_`[injection de dépendances`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Injection_de_dépendances]`_`f : cette injection peut être effectuée de trois manières possibles :

• l’injection de dépendance via le constructeur,
• l’injection de dépendance via les modificateurs (setters),
• l’injection de dépendance via une interface.

Les deux premières sont les plus utilisées par Spring.

Ce framework, grâce à sa couche d’abstraction, ne concurrence pas d’autres frameworks dans une couche spécifique d’un modèle architectural `F33f`_`[Modèle-Vue-Contrôleur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Modèle-Vue-Contrôleur]`_`f mais s’avère être un framework multi-couches pouvant s’insérer au niveau de toutes les couches ; modèle, vue et contrôleur. Ainsi il permet d’intégrer `F33f`_`[Hibernate`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Hibernate]`_`f ou `F33f`_`[iBATIS`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=IBATIS]`_`f pour la couche de persistance ou encore `F33f`_`[Struts`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Apache_Struts]`_`f et `F33f`_`[JavaServer Faces`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=JavaServer_Faces]`_`f pour la couche présentation.

>>Composition de Spring

>>>Noyau de base

Le noyau de Spring est basé sur :

• une `F33f`_`[fabrique`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Fabrique_abstraite_(motif_de_conception)]`_`f générique de composants informatiques, composants nommés `F33f`_`[beans`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=JavaBeans]`_`f (anglais de `*haricots`*, et dans le contexte Java de `*grain de café`*) ;
• un conteneur capable de stocker ces beans.

De plus, le noyau de Spring permet de forcer le contrôle de ces composants de leur extérieur, par la technique nommée `F33f`_`[inversion de contrôle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Inversion_de_contrôle]`_`f.

Le principal avantage est de composer les beans de façon plus déclarative plutôt que de façon impérative dans le programme. Les beans peuvent être définis par le biais de `F33f`_`[fichiers de configuration`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Fichier_de_configuration]`_`f en Java ou `F33f`_`[XML`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Extensible_Markup_Language]`_`f.

>>>>Exemple d'utilisation

Dans l'exemple ci-dessous, deux beans `F33f`_`[singletons`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Singleton_(motif_de_conception)]`_`f sont définis. Le premier est un `F33f`_`[objet d'accès aux données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Objet_d'accès_aux_données]`_`f pour des produits et on l'injecte dans le second qui est un gestionnaire de produits.

`B100`F9d9@Configuration`f`b
`B100`F9d9public class AppConfig {`f`b
`B100`F9d9`f`b
`B100`F9d9 @Bean`f`b
`B100`F9d9 public ClientService clientService(ClientDao clientDao) {`f`b
`B100`F9d9 ClientService clientService = new ClientServiceImpl();`f`b
`B100`F9d9 clientService.setClientDao(clientDao);`f`b
`B100`F9d9 return clientService;`f`b
`B100`F9d9 }`f`b
`B100`F9d9`f`b
`B100`F9d9 @Bean`f`b
`B100`F9d9 public ClientDao clientDao() {`f`b
`B100`F9d9 return new ClientDaoImpl();`f`b
`B100`F9d9 }`f`b
`B100`F9d9}`f`b

Par exemple, lors d'une recherche, on demandera au conteneur Spring de fournir le gestionnaire de produits qui utilisera l'objet d'accès aux données.

>>>Compléments

Divers modules Spring Framework viennent en complément du noyau de base pour permettre l'intégration avec les autres bibliothèques et framework, notamment :

• `*Accès et intégration des données`* pour l'intégration de JDBC, des `F33f`_`[ORM`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Mapping_objet-relationnel]`_`f, de la `F33f`_`[sérialisation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Sérialisation]`_`f des données, de `F33f`_`[JMS`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Java_Message_Service]`_`f et des `F33f`_`[transactions`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Transaction_informatique]`_`f ;
• `*AOP et instrumentation`* pour la `F33f`_`[programmation par aspects`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmation_orientée_aspect]`_`f (`F33f`_`[AspectJ`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=AspectJ]`_`f) ;
• `*Web`* pour la réalisation d'applications web avec les technologies `F33f`_`[Servlet`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Servlet]`_`f et `F33f`_`[websocket`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=WebSocket]`_`f ;
• `*Test`* pour l'intégration avec des frameworks de test comme `F33f`_`[JUnit`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=JUnit]`_`f ou `F33f`_`[TestNG`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=TestNG]`_`f.

>>Notes et références

`:cite-note-1`!1.`! https://src.springsource.org/svn/spring-maintenance/tags/release-1-0/changelog.txt
`:cite-note-wikidata-b3f0a75700a7c62930bf309092fbc24931b80daf-2`!2.`! `:spring-projects`a(en) spring-projects, « Release v6.2.9 · spring-projects/spring-framework » (consulté le 12 août 2025)
`:cite-note-3`!3.`! `F0af`_`[↑`#cite-ref-3]`_`f `:officielle`a`:documentation-officielle`aDocumentation officielle, « Introduction to Spring Framework »
`:cite-note-4`!4.`! `F0af`_`[↑`#cite-ref-4]`_`f `*Expert One-on-One J2EE Design and Development`*,Rod Johnson, Juergen Holler (`F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=International_Standard_Book_Number]`_`f 978-0-7645-4385-2)
`:cite-note-5`!5.`! `F0af`_`[↑`#cite-ref-5]`_`f ego.developpez.com/spring

>>Voir aussi

>>>Articles connexes

• Autres framework similaires

• `F33f`_`[Google Guice`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Google_Guice]`_`f
• Apache HiveMind (uk)

• `F33f`_`[JHipster`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=JHipster]`_`f

>>>Bibliographie

• `*Spring par la pratique`* par Julien Dubois, Jean-Philippe Retaillé, Thierry Templier, `F33f`_`[Eyrolles`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Eyrolles]`_`f, 2006, 517 p., (`F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=International_Standard_Book_Number]`_`f 2212117108)
• `*Spring par l'exemple`* par Gary Mak, PEARSSON, 2008, 492 p., (`F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=International_Standard_Book_Number]`_`f 2744023396)

>>>Liens externes

• (en) Site officiel du projet Spring

• Portail des logiciels libres

`c`F0af`_`[↑ Back to top`#top]`_`f`a